package alo;

/**
 * @ClassName t8
 * @Description TODO
 * @Author Fanxc
 * @DATE 2021/4/20 16:47
 * @Version 1.0
 */
public class t8 {
    public class ListNode {
        int val;
        ListNode next;
        ListNode(int x) { val = x; }
    }
    public ListNode reverseKGroup (ListNode head, int k) {
        if (head==null||head.next==null||k<=1)return head;
        ListNode dummp=new ListNode(0);
        dummp.next=head;
        ListNode pre=dummp,
                cur=head,
                nxt=null;
        int n=0;
        while (cur!=null){
            n++;
            cur=cur.next;
        }
        cur=head;
        for (int i = 0; i < n / k; i++) {
            //只需逆转k-1次即可
            for (int j = 1; j < k; j++) {
                nxt=cur.next;
                cur.next=nxt.next;
                nxt.next=pre.next;
                pre.next=nxt;
            }
            //pre作为新的头前结点。cur作为新的头结点
            // 而此时整个链表的开始就是dummp.next
            pre=cur;
            cur=cur.next;
        }
        return dummp.next;
    }
}
